home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 2: Applications / Linux Cubed Series 2 - Applications.iso / editors / emacs / xemacs / xemacs-1.004 / xemacs-1 / xemacs-19.13 / lisp / oobr / tree-x / tree.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-20  |  2.8 KB  |  103 lines

  1. /* ----------------------------------------------------------------------------
  2.  * File    : tree.h
  3.  * Purpose : Header file for dynamic tree program
  4.  * ----------------------------------------------------------------------------
  5.  */
  6.  
  7. #define INTF 1        /* enable interface-specific code */
  8.  
  9. #define FOREACH_CHILD(child, tree) \
  10.    for ((child) = (tree)->child ; (child) ; (child) = (child)->sibling)
  11.  
  12. #define PT_IN_RECT(p1, p2, x1, y1, x2, y2)   \
  13.      ((p1) > (x1) &&                      \
  14.       (p2) > (y1) &&                       \
  15.       (p1) < (x2) &&                        \
  16.       (p2) < (y2))
  17.  
  18. #define PT_IN_EXTENT(p1, p2, extent)                 \
  19.      ((p1) > (extent).pos.x &&                    \
  20.       (p2) > (extent).pos.y &&                     \
  21.       (p1) < ((extent).pos.x + (extent).width) &&   \
  22.       (p2) < ((extent).pos.y + (extent).height))
  23.  
  24. #define IS_LEAF(node) \
  25.    ((node)->child == NULL)
  26.  
  27. typedef struct line  Polyline;
  28. typedef struct tnode Tree;
  29.  
  30. typedef struct point {
  31.    int x;
  32.    int y;
  33. } Point;
  34.  
  35. typedef struct extent {
  36.    Point pos;            /* top left corner of rectangle     */
  37.    int width;
  38.    int height;
  39. } Extent;
  40.  
  41. struct line {
  42.    int dx, dy;
  43.    Polyline *link;
  44. };
  45.  
  46. typedef struct polygon {
  47.    struct {
  48.       Polyline *head;
  49.       Polyline *tail;
  50.    } lower, upper;
  51. } Polygon;
  52.  
  53. typedef struct label {
  54.    char *text;            /* the actual label text */
  55.    int len;            /* length of label text  */
  56.    int xoffset;            /* the X offset of label inside rectangle */
  57.    int yoffset;            /* the Y offset of label inside rectangle */
  58. } Label;
  59.  
  60. struct tnode {
  61.    Tree    *parent;
  62.    Tree    *child;
  63.    Tree    *sibling;
  64.    int      width;
  65.    int      height;
  66.    int      border;
  67.    Polygon  contour;
  68.    Point    offset;        /* offset is relative to 'predecessor'    */
  69.    Point    pos;            /* position is screen coordinates of node */
  70.    Point    old_pos;            /* position is screen coordinates of node */
  71.    int      node_height;    /* height of node in tree */
  72.    /* all fields below are interface-specific */
  73.    Label    label;
  74.    char*    value;
  75.    Extent   subextent;        /* extent of subtree (excluding this node) */
  76.    Polygon  old_contour;    /* for caching old contour in elision      */
  77.    char     elision;        /* TRUE if this node is collapsed          */
  78.    char     on_path;        /* true if on path to root from node       */
  79.    char     split;              /* flag for drawing subtree contours       */
  80.    char     show_contour;    /* flag to show or hide subtree contour    */
  81. };
  82.  
  83. typedef enum {
  84.    Erase,
  85.    Draw
  86. } DrawMode;
  87.  
  88. typedef enum {
  89.    Old,
  90.    New
  91. } PosMode;            /* Position mode */
  92.  
  93. extern Polyline* MakeLine();
  94. extern Tree*     MakeNode();
  95. extern Tree*     ReadTreeFromFile();
  96. extern void      ComputeTreeSize();
  97. extern void      Unzip();
  98. extern void      Zip();
  99.  
  100. extern Tree     *TheTree;
  101. extern int       NumLines;
  102. extern int       NumNodes;
  103.